/***********************************************************************************************//**
*\n  @file       vme.h
*\n  @brief       vme层 (Virtual Machine Environment) 启动接口
*\n  @details
*\n -----------------------------------------------------------------------------------
*\n  文件说明：
*\n       1.  vme层 (Virtual Machine Environment) 启动接口
*\n
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:        描述:
*\n  V0.01  罗先能        2021.4.9        创建
*\n
***************************************************************************************************/
#pragma  once
#ifndef H_DC5F5163_B11C_435D_9203_4B0C56A43884
#define H_DC5F5163_B11C_435D_9203_4B0C56A43884

#ifdef  __cplusplus
extern "C" {
#endif

/**************************************************************************************************
* 头文件
***************************************************************************************************/
#include "vbase.h"
#include "vtypes.h"
#include "version.h"
#include "vsystem.h"



/**************************************************************************************************
* 宏定义、结构定义
***************************************************************************************************/


/**************************************************************************************************
* 全局变量声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 私有变量声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 私有函数声明、定义
***************************************************************************************************/

#ifdef __linux__
#define barrier()		__asm__   __volatile__("": : :"memory")
#else
#define barrier()
#endif

// 读寄存器
static inline long RegisterGet(void* baseAddress, long offset)
{
	return   *((long*)((long)baseAddress + offset));
	// barrier();
}
// 写寄存器
static inline void RegisterSet(void* baseAddress, long offset, long val)
{
	*((long*)((long)baseAddress + offset)) = val;
	barrier();
}
// 与寄存器
static inline  void RegisterAnd(void* baseAddress, long offset, long val)
{
	*((long*)((long)baseAddress + offset)) &= val;
	barrier();
}
// 或寄存器
static inline void RegisterOr(void* baseAddress, long offset, long val)
{
	*((long*)((long)baseAddress + offset)) |= val;
	barrier();
}
// 异或寄存器
static inline void RegisterXor(void* baseAddress, long offset, long val)
{
	*((long*)((long)baseAddress + offset)) ^= val;
	barrier();
}


/**************************************************************************************************
* 全局函数声明、定义
***************************************************************************************************/


#ifdef  __cplusplus
}
#endif

#endif  // H_DC5F5163_B11C_435D_9203_4B0C56A43884

